<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        function Person(name, age) {
            this.name = name
            this.age = age
        }
        // var person = new Person('卡莎', 20)
        // console.log(person)

        // new关键字的四个功能
        /*
        1.创建一个新对象
        2.将新对象的__proto__指向构造函数的prototype
        3.将构造函数的this指向新对象的执行上下文，并执行构造函数语句
        4.默认返回值为this，如果构造函数有返回对象则返回构造函数的返回对象
        */
        // 用函数模拟new的功能
        function newNew(name, age) {
            var obj = {}
            obj.__proto__ = Person.prototype
            var res = Person.call(obj, name, age)
            if (typeof res === 'undefined') {
                return obj
            } else {
                return res
            }
        }
        var person = newNew('卡莎', 20)
        console.log(person)
        




    </script>
</body>
</html>